package com.ruoyi.mstore.domain;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;
import java.util.UUID;

/**
 * 救援消息实体类
 */
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class RescueMessage implements Serializable {
    private static final long serialVersionUID = 1L;

    /**
     * 消息ID（唯一标识）
     */
    private String messageId;

    /**
     * 救援类型（1：搭电，2：换胎，3：拖车）
     */
    private Integer rescueType;

    /**
     * 会员ID
     */
    private Integer memberId;

    /**
     * 车辆信息
     */
    private VehicleInfo vehicleInfo;

    /**
     * 地理位置信息
     */
    private GeoLocation location;

    /**
     * 情况描述
     */
    private String description;

    /**
     * 消息时间戳（毫秒）
     */
    private Long timestamp;

    /**
     * 扩展字段1
     */
    private String ext1;

    /**
     * 扩展字段2
     */
    private String ext2;

    /**
     * 扩展字段3
     */
    private String ext3;

    /**
     * 默认生成消息ID
     */
    public static RescueMessage createDefault() {
        return RescueMessage.builder()
                .messageId(UUID.randomUUID().toString())
                .timestamp(System.currentTimeMillis())
                .build();
    }

    /**
     * 车辆信息内部类
     */
    @Data
    @Builder
    @NoArgsConstructor
    @AllArgsConstructor
    public static class VehicleInfo implements Serializable {
        private static final long serialVersionUID = 1L;

        /**
         * 车辆类型（1：小客车，2：轻型货车，3：重型货车，4：跑车，5：赛车）
         */
        private Integer model;

        /**
         * 车牌号
         */
        private String number;
    }

    /**
     * 地理位置信息内部类
     */
    @Data
    @Builder
    @NoArgsConstructor
    @AllArgsConstructor
    public static class GeoLocation implements Serializable {
        private static final long serialVersionUID = 1L;

        /**
         * 纬度
         */
        private Double latitude;

        /**
         * 经度
         */
        private Double longitude;

        /**
         * 坐标系类型（如GCJ-02、WGS-84）
         */
        private String coordinateSystem;

        /**
         * 格式化显示位置信息
         */
        public String toFormattedString() {
            return String.format("Lat: %.6f, Lng: %.6f (%s)", latitude, longitude, coordinateSystem);
        }
    }
}
